/**
 * 一些常用的基础方法
 * whetherNavigate 登录后跳转判断
 * unixToDate    将unix时间戳转换为指定格式
 * dateToUnix    将时间转unix时间戳
 * deepClone     对一个对象进行深拷贝
 * formatPrice   货币格式化
 * secrecyMobile 手机号隐私保护
 * randomString  随机生成指定长度的字符串
 */
import config from '@/utils/config'

/**
 * 验证银行卡号
 */
export function checkBankno(bankno) {
	var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一位（与luhm进行比较）
	var first15Num = bankno.substr(0, bankno.length - 1); //前15或18位
	var newArr = [];

	for (var i = first15Num.length - 1; i > -1; i--) {
		//前15或18位倒序存进数组
		newArr.push(first15Num.substr(i, 1));
	}

	var arrJiShu = []; //奇数位*2的积 <9
	var arrJiShu2 = []; //奇数位*2的积 >9
	var arrOuShu = []; //偶数位数组
	for (var j = 0; j < newArr.length; j++) {
		if ((j + 1) % 2 == 1) {
		  //奇数位
		  if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);
		  else arrJiShu2.push(parseInt(newArr[j]) * 2);
		} //偶数位
		else arrOuShu.push(newArr[j]);
	}

	var jishu_child1 = []; //奇数位*2 >9 的分割之后的数组个位数
	var jishu_child2 = []; //奇数位*2 >9 的分割之后的数组十位数
	for (var h = 0; h < arrJiShu2.length; h++) {
		jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
		jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
	}

	var sumJiShu = 0; //奇数位*2 < 9 的数组之和
	var sumOuShu = 0; //偶数位数组之和
	var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
	var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
	var sumTotal = 0;
	for (var m = 0; m < arrJiShu.length; m++) {
		sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
	}
	for (var n = 0; n < arrOuShu.length; n++) {
		sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
	}
	for (var p = 0; p < jishu_child1.length; p++) {
		sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
		sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
	}
	//计算总和
	sumTotal =
		parseInt(sumJiShu) +
		parseInt(sumOuShu) +
		parseInt(sumJiShuChild1) +
		parseInt(sumJiShuChild2);
	//计算Luhm值
	var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
	var luhm = 10 - k;
	if (lastNum == luhm) {
		return true;
	} else {
		return false;
	}
}

/**
 * 登录后跳转判断
 * 计算出当前router路径
 * 1.如果跳转的链接为登录页面或跳转的链接为空页面。则会重新跳转到首页
 * 2.都不满足返回跳转页面
 * @param type  'default' || 'wx'  //返回地址会做判断默认为default
 */

export function whetherNavigate(type = "default") {
  let navigation = getCurrentPages()[getCurrentPages().length - (getCurrentPages().length ) ];
  if (getCurrentPages().length > 1) {
    console.log(navigation, getCurrentPages());
    if (navigation.route == "pages/passport/login") {
      navigationToBack(type);
    } else {
      if (!navigation.route || navigation.route == "undefined") {
        navigationToBack(type);
      } else {
        uni.navigateBack({
          delta: getCurrentPages().length,
        });
      }
    }
  } else {
    uni.switchTab({
      url: "/pages/index/index",
    });
  }
}

/**
 * 将unix时间戳转换为指定格式
 * @param unix   时间戳【秒】
 * @param format 转换格式
 * @returns {*|string}
 */
export function unixToDate(unix, format) {
  if (!unix) return unix;
  let _format = format || "yyyy-MM-dd hh:mm:ss";
  const d = new Date(unix);
  const o = {
    "M+": d.getMonth() + 1,
    "d+": d.getDate(),
    "h+": d.getHours(),
    "m+": d.getMinutes(),
    "s+": d.getSeconds(),
    "q+": Math.floor((d.getMonth() + 3) / 3),
    S: d.getMilliseconds(),
  };
  if (/(y+)/.test(_format))
    _format = _format.replace(
      RegExp.$1,
      (d.getFullYear() + "").substr(4 - RegExp.$1.length)
    );
  for (const k in o)
    if (new RegExp("(" + k + ")").test(_format))
      _format = _format.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
      );
  return _format;
}

/**
 * 将时间转unix时间戳
 * @param date
 * @returns {number} 【秒】
 */
export function dateToUnix(date) {
  let newStr = date.replace(/:/g, "-");
  newStr = newStr.replace(/ /g, "-");
  const arr = newStr.split("-");
  const datum = new Date(
    Date.UTC(
      arr[0],
      arr[1] - 1,
      arr[2],
      arr[3] - 8 || -8,
      arr[4] || 0,
      arr[5] || 0
    )
  );
  return parseInt(datum.getTime() / 1000);
}

/**
 * 货币格式化
 * @param price
 * @returns {string}
 */
export function formatPrice(price) {
  if (typeof price !== "number") return price;
  return String(Number(price).toFixed(2)).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

/**
 * 手机号隐私保护
 * 隐藏中间四位数字
 * @param mobile
 * @returns {*}
 */
export function secrecyMobile(mobile) {
  mobile = String(mobile);
  if (!/\d{11}/.test(mobile)) {
    return mobile;
  }
  return mobile.replace(/(\d{3})(\d{4})(\d{4})/, "$1****$3");
}

/**
 * 随机生成指定长度的字符串
 * @param length
 * @returns {string}
 */
export function randomString(length = 32) {
  const chars =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  const maxPos = chars.length;
  let _string = "";
  for (let i = 0; i < length; i++) {
    _string += chars.charAt(Math.floor(Math.random() * maxPos));
  }
  return _string;
}

/**
 * 计算传秒数的倒计时【天、时、分、秒】
 * @param seconds
 * @returns {{day : *, hours : *, minutes : *, seconds : *}}
 */

export function countTimeDown(seconds) {
  const leftTime = (time) => {
    if (time < 10) time = "0" + time;
    return time + "";
  };
  return {
    day: leftTime(parseInt(seconds / 60 / 60 / 24, 10)),
    hours: leftTime(parseInt((seconds / 60 / 60) % 24, 10)),
    minutes: leftTime(parseInt((seconds / 60) % 60, 10)),
    seconds: leftTime(parseInt(seconds % 60, 10)),
  };
}

export function navigationToBack(type) {
  if (type == "wx") {
    uni.navigateBack({
      delta: getCurrentPages().length,
    });
  } else {
    uni.switchTab({
      url: "/pages/tabbar/home/index",
    });
  }
}

/**
 * 计算当前时间到第二天0点的倒计时[秒]
 * @returns {number}
 */
export function theNextDayTime() {
  const nowDate = new Date();
  const time =
    new Date(
      nowDate.getFullYear(),
      nowDate.getMonth(),
      nowDate.getDate() + 1,
      0,
      0,
      0
    ).getTime() - nowDate.getTime();
  return parseInt(time / 1000);
}

/**
 * 验证手机号
 */
export function checkPhone(phone) {
	var reg = /^1[3-9]\d{9}$/;
	if(reg.test(phone)){
		return true
	}else{
		return false
	}
}

/**
 * 验证身份证号
 */
export function checkIdcard(idcard) {
	var reg = /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[12])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i;
	if(reg.test(idcard)){
		return true
	}else{
		return false
	}	
}

//页面跳转
export function goTo(url) {
	if (url) {
		uni.navigateTo({
			url: url
		})
	}
}

//返回
export function goBack() {
	let pages = getCurrentPages()
	if(pages.length>1){
		uni.navigateBack()
	}else{
		uni.switchTab({
			url:'/pages/index/index'
		})
	}
}

// 拨打电话
export function call(phone) {
	if (phone) {
		uni.makePhoneCall({
		    phoneNumber: phone, // 电话号码
		    success: function () {
		        console.log("拨打电话成功！");
		    },
		    fail: function () {
		        console.log("拨打电话失败！");
		    }
		});
	}
}

// 图片预览
export function previewImgs(imgs,index) {
	if (imgs) {
		uni.previewImage({
			urls: imgs,
			current: index?index:0
		});
	}
}

// 功能开发中
export function onDev() {
	uni.showToast({
		title: '功能开发中...',
		icon: 'none'
	})
}

// 版本号比对
export function compareVersion(version1, version2){
    let [v1, v2] = [version1.split('.'), version2.split('.')];
    let len = Math.max(v1.length, v2.length);
    for (let i = 0; i < len; i++) {
        const num1 = v1[i] ? parseInt(v1[i]) : 0;
        const num2 = v2[i] ? parseInt(v2[i]) : 0;
        if (num1 > num2) {
            return 1;
        } else if (num1 < num2) {
            return -1;
        }
    }
    return 0;
}

// 版本更新提示
export function renewAppModal(isRenew){
	const { platform, romName } = uni.getSystemInfoSync()
	uni.showModal({
		title: "更新提示",
		content: "发现新版本,请确认是否下载更新?",
		showCancel: !isRenew,
		success: (res) => {
			if (res.confirm) {
				if(platform === 'android') {
					// uni.showLoading({
					// 	title: '更新中...'
					// });
					// uni.downloadFile({
					// 	url: config.appDownloadUrlPgy,
					// 	success: (downloadResult) => {
					// 		console.log(downloadResult)
					// 		uni.hideLoading();
					// 		if (downloadResult.statusCode === 200) {
					// 			plus.runtime.install(downloadResult.tempFilePath, {
					// 				force: true
					// 			}, function() {
					// 				console.log('App安装成功！');
					// 				uni.showToast({
					// 					title: 'App安装成功！'
					// 				});
					// 				plus.runtime.restart();
					// 			}, function(e) {
					// 				console.log('App安装失败！');
					// 				uni.showToast({
					// 					title: 'App安装失败！',
					// 					icon: 'none'
					// 				});
					// 			})
					// 		}
					// 	}
					// });
					plus.runtime.openURL(config.appDownloadUrlPgy)
				}else if(platform === 'ios') {
					plus.runtime.openURL(config.appDownloadUrlIos)
				} else {
					uni.showToast({
						title: '您的设备暂时不能更新[${platform}]！',
						icon: 'none'
					});
				}
			}
		}
	})
}

// 跳转地图导航
export function toMapAPP(lat,lon,address){
	if(!lat || !lon) return false
	console.log(lat,lon,address)
	const latitude = Number(lat)
	const longitude = Number(lon)
	// const latitude = Number(31.794715)
	// const longitude = Number(117.245239)
	// #ifdef APP-PLUS
	let url = "";
	if (plus.os.name == "Android") { //判断是安卓端
		plus.nativeUI.actionSheet({ //选择菜单
			title: "选择地图应用",
			cancel: "取消",
			buttons: [{ title: "腾讯地图"},{ title: "百度地图"}, { title: "高德地图"}]
		}, function(e) { 
			switch (e.index) { 
				//下面是拼接url,不同系统以及不同地图都有不同的拼接字段
				case 1:
					//注意referer=xxx的xxx替换成你在腾讯地图开发平台申请的key
					url = `qqmap://map/geocoder?coord=${latitude},${longitude}&referer=LBIBZ-LGG3Z-WUXX5-ZOI6J-2W3QT-5TFHN`;
					console.log(url)
					break;
				case 2:
					url = `baidumap://map/marker?location=${latitude},${longitude}&title=${address}&coord_type=gcj02&src=andr.baidu.openAPIdemo`;
					console.log(url)
					break;
				case 3:
					url = `androidamap://viewMap?sourceApplication=appname&poiname=${address}&lat=${latitude}&lon=${longitude}&dev=0`;
					console.log(url)
					break;
				default:
					break;
			}
			if (url != "") { 
				url = encodeURI(url);
				plus.runtime.openURL(url, function(e) { 
					plus.nativeUI.alert("本机未安装指定的地图应用");
				});
			}
		})
	} else { 
		// iOS上获取本机是否安装了百度高德地图，需要在manifest里配置
		// 在manifest.json文件app-plus->distribute->apple->urlschemewhitelist节点下添加
		//（如urlschemewhitelist:["iosamap","baidumap"]） 
		plus.nativeUI.actionSheet({ 
			title: "选择地图应用",
			cancel: "取消",
			buttons: [{ title: "腾讯地图"},{ title: "百度地图"}, { title: "高德地图"},{ title: "Apple地图"}]
		}, function(e) { 
			switch (e.index) { 
				case 1:
					url = `qqmap://map/geocoder?coord=${latitude},${longitude}&referer=LBIBZ-LGG3Z-WUXX5-ZOI6J-2W3QT-5TFHN`;
					console.log(url)
					break;
				case 2:
					url = `baidumap://map/marker?location=${latitude},${longitude}&title=${address}&content=${address}&coord_type=gcj02&src=ios.baidu.openAPIdemo`;
					console.log(url)
					break;
				case 3:
					url = `iosamap://viewMap?sourceApplication=applicationName&poiname=${address}&lat=${latitude}&lon=${longitude}&dev=0`;
					console.log(url)
					break;
				case 4:// 这个苹果地图的打不开, 大家不要用了, 而且我也没找到任何文档,找到的麻烦跟我说一下啊
					url=`http://maps.apple.com/?q=${address}&ll=${latitude},${longitude}&spn=0.008766,0.019441`;
					break;
				default:
					break;
			}
			if (url != "") { 
				url = encodeURI(url);
				plus.runtime.openURL(url, function(e) { 
					plus.nativeUI.alert("本机未安装指定的地图应用");
				});
			}
		})
	}
	// #endif
	// #ifdef MP-WEIXIN
	uni.getSetting({
		success(res) {
			console.log(res,'----1')
			// 如果没有授权
			if (!res.authSetting['scope.userLocation']) {
				// 则拉起授权窗口
				uni.authorize({
					scope: 'scope.userLocation',
					success() {
						//如果授权了
						uni.openLocation({
							latitude: latitude, //到达的纬度
							longitude: longitude, //到达的经度
							name: address, //到达的名字
							scale: 12,
							success() {
								console.log('success')
							}
						})
					},
					fail(error) {
						//点击了拒绝授权后--就一直会进入失败回调函数--此时就可以在这里重新拉起授权窗口
						uni.showModal({
							title: '提示',
							content: '若点击不授权，将无法使用位置功能',
							cancelText: '不授权',
							cancelColor: '#999',
							confirmText: '授权',
							confirmColor: '#f94218',
							success(res) {
								console.log(res)
								if (res.confirm) {
									// 选择弹框内授权
									uni.openSetting({
										success(res) {
											console.log(res.authSetting)
										}
									})
								} else if (res.cancel) {
									// 选择弹框内 不授权
									console.log('用户点击不授权')
								}
							}
						})
					}
				})
			} else {
				console.log('有授权');
				// 有权限则直接获取
				uni.getLocation({
					type: 'gcj02',
					success: function(res) {
						uni.openLocation({
							latitude: latitude, //到达的纬度
							longitude: longitude, //到达的经度
							name: address, //到达的名字
							scale: 12,
							success() {
								console.log('success')
							}
						})
					},
					fail(error) {
						uni.showToast({
							title: '请勿频繁调用！',
							icon: 'none',
						})
						console.log('失败', error)
					}
				})
			}
		}
	})
	// #endif
}
